package br.fafica.poo2.rightcode.filtro;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

import br.fafica.poo2.rightcode.Aplicacao;
import br.fafica.poo2.rightcode.exception.FiltroNaoEncontradoException;
import br.fafica.poo2.rightcode.exception.listaFiltroVaziaException;

public class RepositorioFiltroSet implements IRepositorioFiltro{
	
	private Set <Filtro> set;
	private static int increment;
	
	public RepositorioFiltroSet(){
		set = new HashSet();
		increment = (getCodigoIncrement()+1);
		System.err.println("CONTRUTOR DE SET FILTRO");
	}
	
	private int getCodigoIncrement(){
		return set.size();
	}

	@Override
	public void TesteFiltro() throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void InstalarFiltro(boolean samples) throws SQLException {
		if(samples){
			Aplicacao app = new Aplicacao();
			for(Filtro f: app.getFiltro()){
				AdicionarFiltro(f);
			}
		}
		
	}

	@Override
	public void AdicionarFiltro(Filtro filtro) throws SQLException {
		if(filtro.getCodigo()==0){
			filtro.setCodigo(increment);
			increment+=1;
		}
		set.add(filtro);
	}

	@Override
	public ArrayList<Filtro> ListaFiltro() throws SQLException,
			listaFiltroVaziaException {
		ArrayList <Filtro> array = new ArrayList();
		array.addAll(set);
		return array;
	}

	@Override
	public void RemoverFiltro(Filtro filtro) throws SQLException {
		set.remove(filtro);
		
	}

	@Override
	public Filtro BuscarFiltro(int codigo) throws SQLException,
			FiltroNaoEncontradoException {
		Filtro busca = null;
		for(Filtro f: set){
			if(f.getCodigo() == codigo){
				busca = f;
				break;
			}
		}
		if(busca == null) throw new FiltroNaoEncontradoException();
		else return busca;
	}

	@Override
	public void EditarFiltro(Filtro filtro)
			throws FiltroNaoEncontradoException, SQLException {
		Filtro novo = BuscarFiltro(filtro.getCodigo());
		if(novo != null){
			novo.setNome(filtro.getNome());
			novo.setDescricao(filtro.getDescricao());
		}else{
			throw new FiltroNaoEncontradoException();
		}
		
	}

}
